#ifndef UDISKMANAGER_H
#define UDISKMANAGER_H

#include "diskmanager.h"

class UdiskManager : public DiskManager
{
public:
    /**
     * @brief enumDevices 枚举u盘
     * @return 设备名列表
     */
    static QStringList enumDevices();

    /**
     * @brief mount 挂载设备
     * @param device 设备名
     * @param dir 挂载点
     * @param message 执行日志
     * @return 是否挂载成功
     */
    static bool mount(const QString &device, const QString &dir, QString *message = Q_NULLPTR);

    /**
     * @brief umount 卸载设备
     * @param device 设备名或挂载点
     * @param message 执行日志
     * @return 是否卸载成功
     */
    static bool umount(const QString &device, QString *message = Q_NULLPTR);

    /**
     * @brief isMount 查询设备是否挂载
     * @param device 设备名
     * @param dir 挂载点
     * @param message 执行日志
     * @return 如果指定目录，返回设备是否已挂载在指定目录；如果不指定，返回u盘是否已挂载
     */
    static bool isMount(const QString &device, const QString &dir = "", QString *message = Q_NULLPTR);

    /**
     * @brief isMountReadOnly 查询设备挂载点是否只读
     * @param device 设备名
     * @param dir 挂载点
     * @param message 执行日志
     * @return 挂载点是否只读
     */
    static bool isMountDirReadOnly(const QString &device, const QString &dir, QString *message = Q_NULLPTR);

    /**
     * @brief isMountDirWritable 查询设备挂载点是否可读写
     * @param device 设备名
     * @param dir 挂载点
     * @param message 执行日志
     * @return 挂载点是否可读写
     */
    static bool isMountDirWritable(const QString &device, const QString &dir, QString *message = Q_NULLPTR);

private:
    UdiskManager();
    Q_DISABLE_COPY(UdiskManager)
};

#endif // UDISKMANAGER_H
